/**
 * 该模块定义了键/值对结构。
 * License: BSD
 * Authors: Lucifer (786325481@QQ.com)
 * Copyright: Copyright (C) 2008 Lucifer. All rights reserved.
 */

module system.collections.Pair;

import system.collections.Comparer;
import system.collections.EqualityComparer;

/**
 * 定义可设置或检索的键/值对。
 */
public struct Pair(TKey, TValue)
{
	private TKey theKey;
	private TValue theValue;

	/**
	 * 用指定的键和值初始化 Pair(TKey, TValue) 结构。
	 */
	public this(TKey key, TValue value)
	{
		theKey = key;
		theValue = value;
	}

	public int opCmp(Pair!(TKey, TValue) pair)
	{
		return DefaultComparer!(TKey).getInstance().compare(theKey, pair.theKey);
	}

	public bool opEquals(Pair!(TKey, TValue) pair)
	{
		auto result = DefaultEqualityComparer!(TKey).getInstance().equals(theKey, pair.theKey);
		if(result)
		{
			return DefaultEqualityComparer!(TValue).getInstance().equals(theValue, pair.theValue);
		}
		else
		{
			return false;
		}
	}

	public hash_t toHash()
	{
		return DefaultEqualityComparer!(TKey).getInstance().toHash(theKey);
	}

	/**
	 * 获取键/值对中的键。
	 */
	public TKey key()
	{
		return theKey;
	}

	/**
	 * 获取键/值对中的值。
	 */
	public TValue value()
	{
		return theValue;
	}
}